#ifndef MINDSPORE_INCLUDE_LLM_CONFIG_H_
#define MINDSPORE_INCLUDE_LLM_CONFIG_H_
#include <string>
#define MS_API __attribute__((visibility("default")))

namespace mindspore {
enum TokenizerType : uint32_t {
    kBert = 0,                         ///< tokenizer type is Bert
    kHuggingFace = 1,                  ///< tokenizer type is HuggingFace
    kUnknownTokenizerType = 0xFFFFFFFF ///< Unknown tokenizer type
};

struct MSPackerConfig {
    std::string pack_path = "";
    std::string model_name = "";
    std::string rope_cos_name = "";
    std::string rope_sin_name = "";
    std::string embedding_weight_name = "";
    std::string attention_mask_name = "";
    std::string tokenizer_name = "";
};

struct LLMConfig {
    int64_t max_length;
    int64_t chunk_size;
    int64_t vocab_size;
    int hidden_size;
    int num_attention_heads;
    int num_key_value_heads;
    int64_t eos_id;
    std::string model_path;
    std::string backend;
    std::string device;
    std::string embedding_bin_path;
    std::string fp16_embedding_bin_path;
    std::string sin_bin_path;
    std::string cos_bin_path;
    std::string om_weight_dir_p = "";
    std::string om_weight_dir_d = "";
    bool embedding_quant = false;
    std::string attention_mask_bin_path;
    int scale_gp_size{32};
    
    // sample config
    float temperature;
    uint32_t top_k;
    bool do_sample;
    uint32_t seed;

    MSPackerConfig ms_packer;
};
} // namespace mindspore
#endif // MINDSPORE_INCLUDE_LLM_CONFIG_H_
